//
//  RBGAnnoncesController.m
//  BateauGenerique
//
//  Created by Kevin De Jesus Ferreira on 26/05/2014.
//  Copyright (c) 2014 Kevin De Jesus Ferreira. All rights reserved.
//

#import "RBGAnnoncesController.h"
#import "RBGNavigationBar.h"
#import "RBGAppDelegate.h"
#import "UIImageView+WebCache.h"
#import "RBGAnnonceCell.h"
#import "RBGDetailAnnonceViewController.h"
#import "RBGServiceAnnonce.h"
#import "Annonce.h"
#import "Lien.h"
#import "Moteur.h"
#import "RBGFiltreController.h"
#import "RBGTrieController.h"
#import "RBGTrieController.h"

@interface RBGAnnoncesController ()<UITableViewDelegate,UITableViewDataSource,RBGServiceAnnonceDelegate,RBGTrieDelegate,RBGFiltreDelegate>{
    NSMutableArray * annonces;
    RBGAppDelegate *appDelegate;
    RBGServiceAnnonce * serviceAnnonce;
    int page ;
    NSMutableDictionary * args;
    
    UIActivityIndicatorView *loader;
    
    NSInteger lastSize;
}

@end

@implementation RBGAnnoncesController


- (void)viewDidLoad
{
    [super viewDidLoad];
    [self charger];
    [self chargerCouleur];
    
    loader = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    loader.frame = CGRectMake(300, 10, 20, 20);
    [self.navigationController.navigationBar.viewForBaselineLayout addSubview:loader];
    [loader startAnimating];
}


-(void)viewWillAppear:(BOOL)animated
{
    
    [self.tableView reloadData];
    
    appDelegate = (RBGAppDelegate *)[[UIApplication sharedApplication] delegate];

    [self.labelNbAnnonce setText:@"En cours de chargement"];

    
}

-(NSString *) nameType{
    
    switch (self.typeAnnonce) {
        case TYPE_ANNONCE_BATEAU_A_MOTEUR :
            return @"bateaux à moteur";
            break;
        case TYPE_ANNONCE_VOILIER:
            return @"voiliers";
            break;
        case TYPE_ANNONCE_SEMI_RIGIDE:
            return @"bateau pneuma./semi-rigides";
            break;
        case TYPE_ANNONCE_MOTEUR:
            return @"moteurs";
            break;
        case TYPE_ANNONCE_PLACE_DE_PORT:
            return @"places de port";
            break;
        case TYPE_ANNONCE_REMORQUES:
            return @"remorques";
            break;
        case TYPE_ANNONCE_ACCESSOIRE:
            return @"accessoires & divers";
            break;
        case TYPE_ANNONCE_LOCATION:
            return @"locations";
            break;
            
    }
    
    return @"annonces";
}

-(void)charger
{
    
    [self setTitle:@"Les offres"];
    
    
    args = [[NSMutableDictionary alloc]init];
    annonces = [[NSMutableArray alloc]init];
    serviceAnnonce = [[RBGServiceAnnonce alloc]init];
    serviceAnnonce.delegate = self;
    
    [serviceAnnonce getAnnonces:self.url andPage:1 andArguments:args];
    page = 1;
    
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    
    appDelegate = (RBGAppDelegate *)[[UIApplication sharedApplication] delegate];
    
    [RBGNavigationBar customNavigationBar:self.navigationController andTitle:@"Type" andBackgroundColor:appDelegate.donnees.parametres.backgroundColorUn andTextColor:appDelegate.donnees.parametres.fontColorUn];
    
    [RBGNavigationBar customNavigationBar:self.navigationController andTitle:@"Type" andBackgroundColor:appDelegate.donnees.parametres.backgroundColorUn andTextColor:appDelegate.donnees.parametres.fontColorUn];
    
    [self.fond setImageWithURL:[NSURL URLWithString:appDelegate.donnees.parametres.imageFond]];
    
    [self.fond setFrame:CGRectMake(0, 0, 300, 132)];
    
    UIImage *original = [UIImage imageNamed: @"listing_loupe"];
    UIImage *small = [UIImage imageWithCGImage:original.CGImage scale:5 orientation:original.imageOrientation];
    UIButton *face1 = [UIButton buttonWithType:UIButtonTypeCustom];
    face1.bounds = CGRectMake( 10, 0, small.size.width, small.size.height );
    [face1 addTarget:self action:@selector(filtre) forControlEvents:UIControlEventTouchUpInside];
    [face1 setImage:small forState:UIControlStateNormal];
    UIBarButtonItem *backButton1 = [[UIBarButtonItem alloc] initWithCustomView:face1];
    
    original = [UIImage imageNamed: @"listing_trier"];
    small = [UIImage imageWithCGImage:original.CGImage scale:5 orientation:original.imageOrientation];
    face1 = [UIButton buttonWithType:UIButtonTypeCustom];
    face1.bounds = CGRectMake( 10, 0, small.size.width, small.size.height );
    [face1 addTarget:self action:@selector(trier) forControlEvents:UIControlEventTouchUpInside];
    [face1 setImage:small forState:UIControlStateNormal];
    UIBarButtonItem *backButton2 = [[UIBarButtonItem alloc] initWithCustomView:face1];
    
    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:backButton2,backButton1, nil]];
}

-(void)filtre
{
    
    //UIViewAnimationOptions options;
    RBGFiltreController *destinationController = [[RBGFiltreController alloc]init];
    
    destinationController.typeAnnonce = self.typeAnnonce;
    destinationController.delegate = self;
    CATransition* transition = [CATransition animation];
    transition.duration = 0.9f;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
    
    //  [destinationController.view.layer addAnimation:transition forKey:kCATransition];
    
    [self.navigationController pushViewController:destinationController animated:YES];
}

-(void)trier
{
    RBGTrieController *controller = [[RBGTrieController alloc] initWithNibName:@"RBGTrieController" bundle:nil];
    
    NSArray * titles;
    //controller.typeAnnonce = self.typeAnnonce;
    controller.delegate = self;
    if(self.typeAnnonce == TYPE_ANNONCE_LOCATION || self.typeAnnonce == TYPE_ANNONCE_BATEAU_A_MOTEUR
       || self.typeAnnonce == TYPE_ANNONCE_VOILIER || self.typeAnnonce == TYPE_ANNONCE_SEMI_RIGIDE){
        titles = [[NSArray alloc] initWithObjects:TRI_PRIX,TRI_ANNEE,TRI_LONGUEUR,TRI_RECENT,nil];
        
    }
    
    if(self.typeAnnonce == TYPE_ANNONCE_MOTEUR){
        titles = [[NSArray alloc] initWithObjects:TRI_PRIX,TRI_PUISSANCE,TRI_RECENT,nil];
        
    }
    
    if(self.typeAnnonce == TYPE_ANNONCE_ACCESSOIRE || self.typeAnnonce == TYPE_ANNONCE_PLACE_DE_PORT || self.typeAnnonce == TYPE_ANNONCE_REMORQUES){
        titles = [[NSArray alloc] initWithObjects:TRI_PRIX,TRI_RECENT,nil];
        
    }
    
    controller.titles = titles;
    controller.controller = self.navigationController;
    [self.navigationController pushViewController:controller animated:YES];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    RBGDetailAnnonceViewController *controller = [[RBGDetailAnnonceViewController alloc] initWithNibName:@"RBGDetailAnnonceViewController" bundle:nil];
    
    controller.typeAnnonce = self.typeAnnonce;
    controller.annonce = [annonces objectAtIndex:indexPath.row];
    
    [self.navigationController pushViewController:controller animated:YES];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    
    return [annonces count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"annonceCell";
    
    Annonce * annonceTmp = [annonces objectAtIndex:indexPath.row];
    RBGAnnonceCell *cell = (RBGAnnonceCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"annonceCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = self.fond;
    cell.selectedBackgroundView = [UIView new];
    
    [cell.titreAnnonce setTextColor:appDelegate.donnees.parametres.fontColorDeux];
    [cell.sousTitreAnnonce setTextColor:appDelegate.donnees.parametres.fontColorDeux];
    [cell.prixAnnonce setTextColor:appDelegate.donnees.parametres.fontColorUn];
    [cell.taxeAnnonce setTextColor:appDelegate.donnees.parametres.fontColorUn];
    
    if(annonceTmp.lien != nil){
        [cell.imageAnnonce setImageWithURL:[NSURL URLWithString:annonceTmp.lien.url]];
    }
    
    [cell.titreAnnonce setText:annonceTmp.title];
    
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    
    NSNumber *prixNumber = [NSNumber numberWithInteger:[annonceTmp.prix integerValue]];
    NSString *prix = [formatter stringFromNumber:prixNumber];
    prix = [prix stringByReplacingOccurrencesOfString:@"," withString:@" "];
    prix = [prix stringByReplacingOccurrencesOfString:@"$" withString:@""];
    
    
    if(self.typeAnnonce == TYPE_ANNONCE_BATEAU_A_MOTEUR || self.typeAnnonce == TYPE_ANNONCE_VOILIER || self.typeAnnonce == TYPE_ANNONCE_SEMI_RIGIDE ){
        
        /*
         Pour Bateaux, Voiliers, Semi-Rigides
         
         > Marque Modele (2lignes si trop grand) / Motorisation - Annee / Prix et TVA
         
         */
        [cell.sousTitreAnnonce setText:[NSString stringWithFormat:@"%@ - %@",annonceTmp.nomMoteur,annonceTmp.annee]];
    }
    
    if(self.typeAnnonce == TYPE_ANNONCE_MOTEUR ){
        
        /*
         
         Pour Moteurs HB/IB
         
         > Marque Modele (2lignes si trop grand) / Puissance en ch - Annee / Prix et TVA
         
         */
        
        Moteur * moteur = annonceTmp.moteur;
        [cell.sousTitreAnnonce setText:[NSString stringWithFormat:@"%@ - %@",moteur.puissanceMoteur,annonceTmp.annee]];
    }
    
    if(self.typeAnnonce == TYPE_ANNONCE_ACCESSOIRE || self.typeAnnonce == TYPE_ANNONCE_PLACE_DE_PORT || self.typeAnnonce == TYPE_ANNONCE_REMORQUES ){
        
        /*
         
         Pour Divers, Place de Port et Remorques
         
         > Intitule (sur deux lignes si trop grand) / Categorie / Prix et TVA
         
         
         */
        
        [cell.sousTitreAnnonce setText:[NSString stringWithFormat:@"%@",annonceTmp.categorie]];
    }
    
    if(self.typeAnnonce == TYPE_ANNONCE_LOCATION){
        
        /*
         
         > Marque Modele(2lignes si trop grand) / Port de Départ (Lieu)
         
         Pour la location, si le prix est différent de 0, il faudra mettre le texte « A partir de » puis le prix puis le texte « / jour » si le prix est
         
         à 0, il faudra mettre « Nous consulter »
         */
        if(annonceTmp.prix == 0){
            [cell.prixAnnonce setText:[NSString stringWithFormat:@"Nous consulter"]];
        }else{
            [cell.prixAnnonce setText:[NSString stringWithFormat:@"A partir de %@ € / jour",prix]];
        }
        
        [cell.sousTitreAnnonce setText:[NSString stringWithFormat:@"%@",annonceTmp.portDeDepart]];
        
    }else{
        /*
         Pour le prix de vente, attention à la balise <apartirde> Disponible dans tous sauf location, Si la balise est à 1, il faudra rajouter le
         
         texte « a partir de » devant le prix.
         
         
         */
        
        if([annonceTmp.apartirDe isEqualToString:@"1"]){
            [cell.prixAnnonce setText:[NSString stringWithFormat:@"A partir de %@ € %@",prix, annonceTmp.taxePrix]];
            
        }else{
            [cell.prixAnnonce setText:[NSString stringWithFormat:@"%@ € %@",prix,annonceTmp.taxePrix]];
        }
        
        [cell.prixAnnonce sizeToFit];
        [cell.taxeAnnonce sizeToFit];
        
        cell.taxeAnnonce.text = annonceTmp.taxePrix;
        cell.taxeAnnonce.frame = CGRectMake(cell.prixAnnonce.frame.origin.x + cell.prixAnnonce.frame.size.width, cell.prixAnnonce.frame.origin.y, 50,cell.prixAnnonce.frame.size.height);        
    }
    
    
    
    UIView *selectedView = [[UIView alloc]init];
    selectedView.backgroundColor = appDelegate.donnees.parametres.backgroundColorDeux;
    cell.selectedBackgroundView =  selectedView;
    return cell;
}



- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 90;
}


-(void)chargerCouleur
{
    [self.tableView setBackgroundView:nil];
    [self.tableView setBackgroundView:[[UIImageView alloc] initWithImage:self.fond.image] ];
    [self.tableView setSeparatorColor:appDelegate.donnees.parametres.fontColorUn];
    
    [self.enTeteAnnonce setBackgroundColor:appDelegate.donnees.parametres.backgroundColorDeux];
    [self.labelNbAnnonce setTextColor:appDelegate.donnees.parametres.fontColorDeux];
    
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.01;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 115 * 2;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView_
{
    CGFloat actualPosition = scrollView_.contentOffset.y;
    CGFloat contentHeight = scrollView_.contentSize.height - (90*10);
    if (actualPosition >= contentHeight && lastSize > 0) {
        page++;
        [serviceAnnonce getAnnonces:self.url andPage:page andArguments:args];
    }
}

- (void) receiveDonneesAnnonce:(id)donnees
                      andType :(int)typeDonnees
{
    
    [annonces addObjectsFromArray:donnees];
    [self.tableView reloadData];
    
    NSArray *array = donnees;
    lastSize = [array count];
    
    if(appDelegate.number == nil)
        [self.labelNbAnnonce setText:[NSString stringWithFormat:@"%@ %@ trouvées",self.nbAnnonce, [self nameType]]];
    else
        [self.labelNbAnnonce setText:[NSString stringWithFormat:@"%@ %@ trouvées",appDelegate.number, [self nameType]]];
    
    
    [loader stopAnimating];
    loader.hidden = YES;
}

- (void) receiveErreurAnnonce:(int)statut
{
    [loader stopAnimating];
    loader.hidden = YES;
    
    UIAlertView *alert = [[UIAlertView alloc]
                          
                          initWithTitle:@"Erreur"
                          message:@"Erreur réseau : votre téléphone ne peut pas accéder aux informations"
                          delegate:self
                          cancelButtonTitle:@"Ok"
                          otherButtonTitles:nil];
    
    [alert show];
    
}

- (void) receiveTrie:(NSString *)trier andSens:(BOOL)croissant{
    
    NSArray * donnees = [annonces sortedArrayUsingComparator:^NSComparisonResult(Annonce *a1, Annonce *a2){
        
        
        if([trier isEqualToString:TRI_PRIX]){
            
            
            if(croissant)
                return [a1.prix integerValue] > [a2.prix integerValue];
            
            else
                return [a1.prix integerValue] < [a2.prix integerValue];
        }
        
        
        if([trier isEqualToString:TRI_RECENT]){
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            // this is imporant - we set our input date format to match our input string
            // if format doesn't match you'll get nil from your string, so be careful
            [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
            
            // voila!
            [dateFormatter setLocale:[NSLocale systemLocale]];
            
            NSDate *dateA1 = [[NSDate alloc] init];
            dateA1 = [dateFormatter dateFromString:a1.pubDate];
            
            NSDate *dateA2 = [[NSDate alloc] init];
            dateA2 = [dateFormatter dateFromString:a2.pubDate];
            
            if(croissant)
                return [dateA1 compare:dateA2];
            
            else
                return [dateA2 compare:dateA1];
        }
        
        
        if([trier isEqualToString:TRI_ANNEE]){
            
            
            if(croissant)
                return [a1.annee integerValue] > [a2.annee integerValue];
            
            else
                return [a1.annee integerValue] < [a2.annee integerValue];
        }
        
        /*
         #define TRI_LONGUEUR @"Longueur"
         #define TRI_PUISSANCE @"Puissance"
         */
        if([trier isEqualToString:TRI_LONGUEUR]){
            
            
            if(croissant)
                return [a1.longueur integerValue] > [a2.longueur integerValue];
            
            else
                return [a1.longueur integerValue] < [a2.longueur integerValue];
        }
        
        /*
         #define TRI_LONGUEUR @"Longueur"
         #define TRI_PUISSANCE @"Puissance"
         */
        if([trier isEqualToString:TRI_PUISSANCE]){
            
            
            if(croissant)
                return [a1.moteur.puissanceMoteur integerValue] > [a2.moteur.puissanceMoteur integerValue];
            
            else
                return [a1.moteur.puissanceMoteur integerValue] < [a2.moteur.puissanceMoteur integerValue];
        }
        
        return [a1.prix compare:a2.prix];
    }];
    
    annonces = [[NSMutableArray alloc]initWithArray:donnees];
    [self.tableView reloadData];
}

- (void) receiveDonneesFiltre:(NSMutableDictionary *) donnees{
    
    annonces = [[NSMutableArray alloc]init];
    args = donnees;
    [serviceAnnonce getAnnonces:self.url andPage:1 andArguments:args];
    page = 1;
    
    if(appDelegate.number == nil)
        [self.labelNbAnnonce setText:[NSString stringWithFormat:@"%@ %@ trouvées",self.nbAnnonce, [self nameType]]];
    else
        [self.labelNbAnnonce setText:[NSString stringWithFormat:@"%@ %@ trouvées",appDelegate.number, [self nameType]]];
    
}

//


- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    
    // If row is deleted, remove it from the list.
    
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        
        
    }
    
}

@end
